1 一些概念

  1. 工作副本(Working Copy):你的代码相关的一切,你自己弄得文件和目录。
  2. 暂存区(Stage,Index): 对工作副本需要提交的信息的一个跟踪,存储在工作副本目录下.git/index的文件里面,记录通过git add 结果的文件信息。
  3. 本地仓库(Repository): 本地的代码版本库,为git commit的目标区。
  4. 远程仓库(Remote Repository): 远程的代码版本库,为git push 的目标区
    HEAD: 记录当前工作副本,最后一次提交的版本。
    origin: 默认的远程库主机名,与hosts类似。
    master: 默认的名称为master的分支(或者可以叫主分支,trunk)。

1—-git add—->2—-git commit—->3————–git push————>4

1————-git commit -a———>3

1<————git checkout———–3<——–git fetch/clone———–4

1<————————–git pull————————————-4

2 配置SSH Key认证,配置多个账户

2.1 配置 SSH-Key 认证

  • 生成ssh key
      ssh-keygen -t rsa "youemail"
    
    Tips: 存储的路径是绝对路径,在非bash环境下,windows中的路径需要改一改,phrase有没有都没有关系
  • 配置多个账户
    如果你需要向不同的git中提交内容,可能还使用不同的ssh认证,比如说公司git和个人git
    你需要为不同的主机配置多个不同的ssh key认证,步骤如下:
    • 切换到~/.ssh
      windows下的路径为 c:\username.ssh
      Linux路径为/home/username/.ssh/
    • 编辑配置文件 config
      输入以下内容:
        Host host1
            HostName host1.test.com
            User    test1
            IdentityFile    ~/.ssh/test1_id_rsa
      
        Host host2
            HostName host2.test.com
            User    test2
            IdentityFile    ~/.ssh/test2_id_rsa
      

Tips:以上写法在git bash环境下可以支持,否则,ssh查找key的路径为 /home/username/.ssh这样在windows 环境下是无效的。

3 问题解决

3.1 Permission Denied(publickey)

在cmd,powershell,xshell中执行git 操作会有这样的权限不足的提示
原因是,在没有bash环境的命令行下, 执行git会找/home/username/.ssh/
而这个路径在windows下是不存在的,而且也不会做C:\uername.ssh\到 /c/username/.ssh/的转换
所以根本就找不到ssh key,自然无法认证,导致认证失败

  • 解决办法:windows 下给git增加 bash环境
    在windows中安装git中,会选择git的环境的PATH,在命令行使用git,三个选项:
    • Use Git from Git Bash only
    • Use Git from the Windows Commond Prompt
    • Use Git and opotional Unix tools from the Windows Command Prompt

在第一个选项中,只有在git bash中使用git的时候,才会正确找到~/.ssh的路径,会做c:\username.ssh\ 到/c/username/.ssh/的转换,所以即使你把所有的git bin目录加入到PATH中,在非git bash的命令行下,同样也会得到Permission Denied(publickey)的结果

在第二个选项中,在git bash 和 windows 命令行中对git相关的命令做相应的转换,这样在Windows命令行和Git bash下都能正确的进行ssh key 认证。

第三个选项,会将所有git安装的所有的命令都做相应的转换。包括ssh等命令。

  • 测试方法
    使用ssh 命令测试对github的连接,分别git bash和windows命令行中测试如下命令,在调试信息中可以看到输出结果。
      ssh -v github.com
      ssh -vv github.com 
    

3.2 git 每次输入都需要输入用户名和密码

  • 存储用户名和密码
    在使用HTTPS协议的情况下,是需要输入用户名和密码的,可以存储在配置文件中,或存储在URL中,不过这样的安全性会降低

  • 使用SSH协议的URL
    git支持多种协议的,选择ssh连接的url,替换本地工作副本下的文件中的https协议的url
    路径为WorkingCopy/.git/config
    这样就可以使用ssh认证,而不需要每次都输入用户名密码,甚至连密码都不需要输入(如果你的ssh key没有设置密码的话)

4 参考资料

  1. Git教程和基本原理
  2. Git Book中文
  3. Git Book English
  4. Git Reference
  5. 图解Git中文版
  6. 手把手教你使用git
  7. Git常用命令
  8. Git常用命令整理
  9. Git Community Book中文
  10. Git Manual
  11. Git简明指南
  12. Git简易指南
  13. Git远程操作详解
  14. 看日记学Git
  15. 易百Git教程
  16. Git工作区,暂存区和版本库
  17. Git工作区和暂存区讲解
  18. Git SSH key本地多个SSH key
  19. Git多账号登陆
  20. 多个git账户生成多份rsa秘钥实现多个账户同时使用配置
  21. Git ssh多账户管理
  22. git初体验(七)多账户的使用
  23. Git Push 避免用户名和密码的方法

最后更新: 2022年03月02日 03:32

原始链接: http://rawbin-.github.io/dev-tools/git/2015-03-18-using-git/

× 赞赏这个人~
打赏二维码